<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        /* 
        
        给你两个按非递减顺序排列的整数数组nums1和nums2，另有两个整数m和n，
        分别表示nums1和nums2中的元素数目。
        请你合并nums2到nums1中，使合并后的数组同样按非递减顺序排列。 
        注意：最终，合并后数组不应由函数返回，而是存储在数组nums1 中.
        为了应对这种情况，nums1的初始长度为 m + n，其中前 m 个元素表示应合并的元素，后 n 个元素为 0 ，应忽略。nums2 的长度为 n 。
        */
        nums1 =[1,2,3,0,0,0];
        m =3;
        nums2 =[2,5,6];
        n =3;
    var merge = function (nums1, m, nums2, n) {
        nums1.splice(m)
        nums2.splice(n)
        nums1=nums1.concat(nums2)
        nums1.sort((a,b)=>a-b)
        console.log(nums1)
    }
    merge (nums1, m, nums2, n)


// =====================================================================================
    function merge(nums1, m, nums2, n) {
    let i = m - 1; // nums1 中最后一个元素的索引
    let j = n - 1; // nums2 中最后一个元素的索引
    let k = m + n - 1; // nums1 中最后一个位置的索引

    // 从后往前合并
    while (i >= 0 && j >= 0) {
        if (nums1[i] > nums2[j]) {
            nums1[k] = nums1[i];
            i--;
        } else {
            nums1[k] = nums2[j];
            j--;
        }
        k--;
    }

    // 如果 nums2 中还有剩余元素，将它们复制到 nums1 的前面
    while (j >= 0) {
        nums1[k] = nums2[j];
        k--;
        j--;
    }
}

// 示例
let nums1 = [1, 2, 3, 0, 0, 0];
let m = 3;
let nums2 = [2, 5, 6];
let n = 3;
merge(nums1, m, nums2, n);
console.log(nums1); // 输出合并后的 nums1

    </script>
</head>
<body>
    
</body>
</html>